home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume20 / ftok / part01 next >
Encoding:
Text File  |  1991-06-08  |  4.1 KB  |  127 lines

  1. Newsgroups: comp.sources.misc
  2. From: Mathew Kimmel <kimmel@umvlsi.ecs.umass.edu>
  3. Subject:  v20i045:  ftok - ftok() clone for Coherent, Part01/01
  4. Message-ID: <1991Jun7.182157.12796@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: d7780d390f6d99715394e0694f57b2ff
  6. Date: Fri, 7 Jun 1991 18:21:57 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Mathew Kimmel <kimmel@umvlsi.ecs.umass.edu>
  10. Posting-number: Volume 20, Issue 45
  11. Archive-name: ftok/part01
  12. Environment: Coherent
  13.  
  14. This is a clone of the ftok() function used with interprocess
  15. communications functions.  This is a standard function on most unixes,
  16. but Coherent lacks it, so I wrote my own version.  Basically, what it
  17. does is return a unique key to be used with the {msg,sem,shm}get
  18. functions, based on a filename and an integer.  For details about the
  19. algorithm and usage, see the man page and comments at the beginning of
  20. ftok.c
  21.  
  22. -Matt
  23. ---cut here---
  24. #! /bin/sh
  25. # This is a shell archive.  Remove anything before this line, then unpack
  26. # it by saving it into a file and typing "sh file".  To overwrite existing
  27. # files, type "sh file -c".  You can also feed this as standard input via
  28. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  29. # will see the following message at the end:
  30. #        "End of shell archive."
  31. # Contents:  ftok.c ftok.man
  32. # Wrapped by kimmel@umvlsi.ecs.umass.edu on Fri Jun  7 01:44:52 1991
  33. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  34. if test -f ftok.c -a "${1}" != "-c" ; then 
  35.   echo shar: Will not over-write existing file \"ftok.c\"
  36. else
  37. echo shar: Extracting \"ftok.c\" \(1216 characters\)
  38. sed "s/^X//" >ftok.c <<'END_OF_ftok.c'
  39. X/* key_t ftok(filename,c) - Create a unique IPC key based on a filename
  40. X *                          and an 8-bit number.
  41. X *
  42. X * This function takes as parameters a pointer to an ascii string
  43. X * containing the pathname of a file, and an integer.  It then returns
  44. X * a (hopefully) unique IPC key.  The key is a 32-bit integer, and is
  45. X * constructed as follows: the lower 8 bits are the low 8 bits of c.
  46. X * The next 8 bits are the low 8 bits of the device descriptor of the
  47. X * device the file is located on.  The upper 16 bits are the inode
  48. X * of the file.
  49. X *
  50. X * This code copyright (c) Matt Kimmel 1991.  Permission granted for
  51. X * unrestricted use in non-commercial products.
  52. X */
  53. X#include <sys/ipc.h>
  54. X#include <sys/stat.h>
  55. X
  56. Xkey_t ftok(filename,c)
  57. Xchar *filename;
  58. Xint c;
  59. X{
  60. X  struct stat fs;
  61. X  union {
  62. X    key_t key;
  63. X    struct {
  64. X      char c;
  65. X      char dev;
  66. X      int inode;
  67. X      } info;
  68. X    } keyval;
  69. X
  70. X  /* First attempt to stat the file */
  71. X  if(stat(filename,&fs) == -1) {
  72. X    perror("ftok");
  73. X    exit(1); /* Best to exit if this happens, or we may have a major IPC collision... */
  74. X    }
  75. X
  76. X  keyval.info.c = (char)c;
  77. X  keyval.info.dev = (char)fs.st_dev;
  78. X  keyval.info.inode = (int)fs.st_ino;
  79. X  return(keyval.key);
  80. X}
  81. X
  82. END_OF_ftok.c
  83. if test 1216 -ne `wc -c <ftok.c`; then
  84.     echo shar: \"ftok.c\" unpacked with wrong size!
  85. fi
  86. # end of overwriting check
  87. fi
  88. if test -f ftok.man -a "${1}" != "-c" ; then 
  89.   echo shar: Will not over-write existing file \"ftok.man\"
  90. else
  91. echo shar: Extracting \"ftok.man\" \(496 characters\)
  92. sed "s/^X//" >ftok.man <<'END_OF_ftok.man'
  93. X.TH ftok
  94. X.SH USAGE
  95. X.PP
  96. Xkey_t ftok(pathname,c);
  97. Xchar *pathname;
  98. Xint c;
  99. X.SH SYNOPSIS
  100. X.PP
  101. Xftok() takes as parameters the pathname of
  102. Xan existing file or directory, and a number.
  103. XFrom these, it assembles a (hopefully) unique
  104. Xkey to be used with the interprocess communcation
  105. Xsystem calls (specifically, msgget(), semget() and
  106. Xshmget()).  The method used for generating this
  107. Xkey is complex; note, however, that only the lower
  108. X8 bits of c are used.
  109. X.SH SEE ALSO
  110. X.PP
  111. Xipc.h, msgget(), semget(), shmget()
  112. END_OF_ftok.man
  113. if test 496 -ne `wc -c <ftok.man`; then
  114.     echo shar: \"ftok.man\" unpacked with wrong size!
  115. fi
  116. # end of overwriting check
  117. fi
  118. echo shar: End of shell archive.
  119. exit 0
  120.  
  121. exit 0 # Just in case...
  122. -- 
  123. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  124. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  125. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  126. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  127.